#ifndef MOTION_H
#define MOTION_H

//Библиотека OpenCV.
#include <opencv/cv.h>


//Внутренняя библиотека.
#include "vidfilter.h"


//Объявление внешних классов.
class VidFrame;


class Motion : public VidFilter
{
	Q_OBJECT
signals:
	void motionDetect();
	void achievedTreshold(bool achieved);

public:
	//Конструктор.
	Motion(int index, QObject *parent = NULL);

	//Деструктор.
	virtual ~Motion();

	//Функция возврата типа фильтра.
	VidFilter::TYPE getType() {return VidFilter::MOTION;}

	//Функция управления режимом тестирования ДД.
	void setTestMode(bool testmode);

	//Функция определения активности режима тестирования ДД.
	bool isTestMode();

	//Функция установки порога срабатывания ДД.
	void setTreshold(int _treshold);

	//Функция возврата порога срабатывания ДД.
	int getTreshold();

	//Функция установки чувствительности ДД.
	void setSensitive(int _sensitive);

	//Функция возврата чувствительности ДД.
	int getSensitive();

	//Функция установки подавления шума.
	void setNoiseRemoving(bool noise_remove);

	//Функция возврата состояния параметра подавления шума.
	bool getNoiseRemoving();

	//Функция активации ДД.
	void detect(VidFrame *vidframe);

	//Функция рисования точек движения.
	void drawDetection(IplImage *img);

private:
	bool isTest;

	IplImage *image, *lastImage, *diffImage;

	CvMemStorage *storage;
	CvSeq *contour;

	int treshold, sensitive;
	bool adaptiveTreshold, noiseRemoving;

	int length;

	uchar *vData;
	int width, height, len;

};

#endif
